package com.xgy.userauthsystem.entity;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;

/**
 * 用户实体类
 * 对应数据库中的users表
 */
@Setter
@Getter
public class User {

    /**
     * 用户唯一标识符
     * 数据库自增主键
     */
    private Long id;

    /**
     * 用户名
     * 长度必须在3-50个字符之间，且不能重复
     */
    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 50, message = "用户名长度必须在3-50个字符之间")
    private String username;

    /**
     * 用户密码
     * 至少6个字符长度
     */
    @NotBlank(message = "密码不能为空")
    @Size(min = 6, message = "密码长度至少6个字符")
    private String password;

    /**
     * 用户邮箱地址
     * 可为空，但必须唯一
     */
    private String email;

    /**
     * 用户创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 用户信息最后更新时间
     */
    private LocalDateTime updatedAt;

    // 默认构造方法
    public User() {
        this.createdAt = LocalDateTime.now();
        this.updatedAt = LocalDateTime.now();
    }

    // 带参数构造方法
    public User(String username, String password, String email) {
        this();
        this.username = username;
        this.password = password;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                ", createdAt=" + createdAt +
                ", updatedAt=" + updatedAt +
                '}';
    }
}